1. Field of the Invention
The present invention generally relates to an integrated software development environment (IDE) for managing software development projects that incorporate source code subject to licensing restrictions.
2. Description of the Related Art
Computer programs are written using programming languages such as C, C++, Java®, Pascal, and Perl. The text of a computer program written in such a language is called the source code. Depending on the complexity of the program, the source code for a program may only require a few lines of text, or it may require millions of lines spread across many modules. Before a computer can execute a program, the source code must be converted into object code by compilers, assemblers or interpreters (each itself a software application). Object code includes a sequence of instructions that may be executed by a particular computer system.
In writing the source code for a program, programmers routinely rely on libraries to perform a variety of programmatic tasks, for example, printing data files or logging onto a network. Libraries typically provide a set of functions, methods, objects or classes (depending on the library and the programming language) that a programmer may include in the source code for a program being developed. Libraries may be provided by the programming language, written by third-parties, or the programmers themselves. Depending on how a library is distributed, a programmer may have access to both the source code and object code for a library, or may only have access to the object code. Distributing only the object code allows a programmer to write source code that calls the functions provided by the library, without providing the programmer with the implementation of the functions.
Additionally, programmers frequently share source code with one another to communicate different ideas, or to share examples of code written to perform a particular function. Further, programmers often re-use portions of source code from one program in others. For example, programmers often use clipboard features to copy and paste source code from one file into another, or write source code that links to a module or library written for another program. Re-using source code prevents developers from having to “re-invent the wheel,” and allows business to develop software that is more reliable, built faster, and less expensive. Given the effectiveness of re-using source code, very few software programs are written from scratch. Simply including source code from one program in another, or including a call to a function from an available library, however, may limit how software incorporating such source code may be distributed.
Typically, software applications, including libraries, are distributed under the terms of a license agreement. Given the expense that a business may incur in developing a software application, it will often distribute only the compiled and executable form of the software (i.e., object code), and not distribute the source code with the program. The license for a software application typically allows the end-user to install and execute the program, but prohibits the end-user from making or distributing any changes, modifications or derivative works of the software application.
From its beginnings in the early 1980's, an “open” distribution model has gained substantial popularity, especially among software developers. An open source software project typically distributes the source code together with the application, under the terms of an open source license. Open source licenses typically allow anyone to submit improvements, and to use the source code, or portions thereof, themselves. This includes fixing bugs in the open source projects, improving its performance, adding features, or building entirely new applications that include the source code.
In exchange, most open source licenses require that applications including the open source code be distributed with an attribution indicating that code from a particular project is included in the application (e.g., the well-known the BSD and MIT open source licenses). Other open source licenses also require that any derivative works, i.e., any software program that incorporates source code from the open source project, must itself be distributed under an open source licenses (e.g., the GNU foundation General Public License (GPL) and Lesser General Public License (LGPL)). These latter licenses prevent source code distributed under an open source license from being included in software applications distributed using a “closed” license.
Open source code offers many opportunities for organizations today, and the open source distribution model has produced many well-known and highly regarded software applications. However, the accidental use of open source code in a product that a business intends to distribute using a closed license (or vice versa) can have substantial consequences. For example, some open source licenses require that if source code is included (or in some cases linked to) in a target software program, then the source code for the target software program must itself be made available under the license used by the open source project. Thus, a software program that a business intends to distribute under a closed license may be forced open by the unintentional inclusion of open source code. Further, once source code that a business wishes to remain proprietary is distributed under an open source license, there may be little opportunity to “take back” the code, and prevent its distribution.
As described above, some open source licenses require that the license for the target program include an attribution indicating that the target program includes source code from the open source project. The target program may still be distributed under a closed license, but the license must include the attribution. Compliance with this requirement creates administrative overhead, unrelated to the actual software development that must be managed.
Unfortunately, it is often difficult to determine which open source code may be included in a target program, which can be included if changes are made to the license used to distribute the target program, and which must be avoided entirely. Even if a software application being developed is going to be distributed under an open source license, not all open source licenses are compatible. Thus, it can become very difficult for a programmer to make good decisions, even with the best of intentions. Further, because a programmer may be focused on writing code, she may not consider (or properly understand) the legal issues involved in incorporating source code from an open source project into an application. Because of these problems, many businesses simply prohibit using any open source code in a software project. Doing so avoids the legal or administrative issues, but also ignores valuable resources provided by the open source community. Accordingly, there is a need for a software development process that manages the co-mingling of source code from different sources, including open source projects.